﻿using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Com.Binaria.SISCOB.Web.Presenter;
using Com.Binaria.SISCOB.Funcional.DTO;
using Com.Binaria.SISCOB.Web.View;
using iTextSharp.text;
using System.IO;
using iTextSharp.text.pdf;
using System.Text;
using System.Collections.Generic;

namespace Com.Binaria.SISCOB.Web.Paginas.Reporte
{
    public partial class Default : System.Web.UI.Page, IRptView
    {
        private RptPresenter presenter;

      bool IsView
      {
         get { return !string.IsNullOrEmpty(Request.QueryString["View"]); }
      }

      protected void Page_Load(object sender, EventArgs e)
      {
         if (IsView) this.pnlView.Visible = false;
      }

      Control GetControl()
      {
         //Se pretende Editar y/o Crear
          if (string.IsNullOrEmpty(Request.QueryString["Rpt"]))
          {
              if (!string.IsNullOrEmpty(Request.QueryString["Id"])
                  || (!string.IsNullOrEmpty(Request.QueryString["Action"]) && Request.QueryString["Action"] == "3"))
                  Page.MasterPageFile = "~/Paginas/Empty.master";
          }
          else
          {
              IdRpt = Convert.ToInt32(Request.QueryString["Id"]);
              ReporteConciliacionFuncionalDTO reporte = ((IRptView)this).Presenter.GetRptConcFuncional();
              CrearInformePdf(reporte);
          }
         return GetControlPlace("cpContenido");
      }

      Control GetControlPlace(string cpName)
      {
         Control cpControl = Page.FindControl(cpName);
         if (cpControl == null)
         {
            MasterPage theMaster = Page.Master;
            while (Page.Master != null)
            {
               cpControl = theMaster.FindControl(cpName);
               if (cpControl != null)
                  return cpControl; // cpControl.Controls.Add(oControl);
               theMaster = theMaster.Master;
            }
         }
         return cpControl;
      }

      protected override void OnPreInit(EventArgs e)
      {
          if (!IsView) return;
          string sView = Request.QueryString["View"];
          //
          Control parentControl = GetControl();
          //
          if (sView == "Conciliacion")
          {
             ManttoPresenter<ConciliacionFuncionalDTO> oPresenter = new ManttoPresenter<ConciliacionFuncionalDTO>();
             oPresenter.Initialize(this);
             oPresenter.RenderView(parentControl);
          }
        }

      #region IRptView Members

      public int IdRpt { set; get; }


      RptPresenter IRptView.Presenter
      {
          get
          {
              this.presenter = new RptPresenter(this);
              return this.presenter;
          }
      }



      #endregion

      private void CrearInformePdf(ReporteConciliacionFuncionalDTO ReporteConciliacion)
      {
          using (Document doc = new Document(PageSize.LETTER))
          {

              using (MemoryStream ms = new MemoryStream())
              {

                  PdfWriter.GetInstance(doc, ms);
                  doc.Open();

                  #region Cuerpo del Reporte

                  #region Configuracion de Fuentes

                  #region Fuente Titulo
                  Font fTitulo = new Font();
                  fTitulo.SetStyle(Font.BOLD);
                  fTitulo.Size = 20f;
                  #endregion

                  #region Fuente Cabeceras
                  Font fCabecerasSeccion = new Font();
                  fCabecerasSeccion.SetStyle(Font.BOLD);
                  fCabecerasSeccion.Size = 11f;
                  #endregion

                  #region Fuente Glosas
                  Font fText = new Font();
                  fText.SetStyle(Font.BOLD);
                  fText.Size = 10f;
                  #endregion

                  #region Valores
                  Font fValue = new Font();
                  fValue.Size = 8f;
                  #endregion

                  #endregion

                  #region Tabla Principal

                  PdfPTable table = new PdfPTable(3);
                  table.TotalWidth = 550f;
                  table.AbsoluteWidths[0] = 75f;
                  table.AbsoluteWidths[1] = 375f;
                  table.AbsoluteWidths[2] = 100f;
                  table.LockedWidth = true;
                  table.HorizontalAlignment = 1;

                  #endregion

                  #region Celdas Cabeceras

                  PdfPCell cellCabeceraIzq = new PdfPCell();
                  cellCabeceraIzq.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right         
                  cellCabeceraIzq.BorderWidthRight = 0;
                  String mapSeremiSalud = Server.MapPath("~\\Assets\\images\\seremiSalud.png");
                  iTextSharp.text.Image pngSeremiSalud = iTextSharp.text.Image.GetInstance(mapSeremiSalud);
                  pngSeremiSalud.ScaleToFit(70f, 65f);
                  cellCabeceraIzq.AddElement(pngSeremiSalud);
                  cellCabeceraIzq.PaddingTop = 20f;
                  cellCabeceraIzq.PaddingBottom = 20f;
                  cellCabeceraIzq.PaddingRight = 20f;
                  cellCabeceraIzq.PaddingLeft = 10f;


                  PdfPCell cellCabeceraCentro = new PdfPCell();
                  cellCabeceraCentro.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right
                  cellCabeceraCentro.BorderWidthLeft = 0;
                  cellCabeceraCentro.BorderWidthRight = 0;
                  Paragraph Titulo = new Paragraph(ReporteConciliacion.TituloReporte, fTitulo);
                  Titulo.Alignment = Element.ALIGN_CENTER;
                  cellCabeceraCentro.AddElement(Titulo);
                  cellCabeceraCentro.VerticalAlignment = PdfPCell.ALIGN_CENTER;
                  cellCabeceraCentro.PaddingTop = 30f;
                  cellCabeceraCentro.PaddingLeft = 10f;


                  PdfPCell cellCabeceraDer = new PdfPCell();
                  cellCabeceraDer.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right
                  cellCabeceraDer.BorderWidthLeft = 0;
                  //String mapGobiernodeChile = Server.MapPath("~\\Assets\\images\\GobiernodeChile.png");
                  //iTextSharp.text.Image pngGobiernodeChile = iTextSharp.text.Image.GetInstance(mapGobiernodeChile);
                  //pngGobiernodeChile.ScaleToFit(90f, 85f);
                  //cellCabeceraDer.AddElement(pngGobiernodeChile);
                  cellCabeceraDer.HorizontalAlignment = 1;
                  cellCabeceraDer.PaddingTop = 40f;


                  table.AddCell(cellCabeceraIzq);
                  table.AddCell(cellCabeceraCentro);
                  table.AddCell(cellCabeceraDer);




                  #endregion

                  #region SeccionInfoEmision

                  PdfPCell cellInfoEmision = new PdfPCell(new Phrase("Información de Emisión", fCabecerasSeccion));
                  cellInfoEmision.HorizontalAlignment = 0; //0=Left, 1=Centre, 2=Right
                  cellInfoEmision.Colspan = 3;
                  cellInfoEmision.BackgroundColor = BaseColor.LIGHT_GRAY;
                  cellInfoEmision.PaddingLeft = 3f;
                  cellInfoEmision.PaddingTop = 4f;
                  table.AddCell(cellInfoEmision);

                  PdfPTable TableContenedorInfoEmision = new PdfPTable(4);
                  TableContenedorInfoEmision.TotalWidth = 550f;
                  TableContenedorInfoEmision.AbsoluteWidths[0] = 125f;
                  TableContenedorInfoEmision.AbsoluteWidths[1] = 250f;
                  TableContenedorInfoEmision.AbsoluteWidths[2] = 75f;
                  TableContenedorInfoEmision.AbsoluteWidths[3] = 100f;
                  TableContenedorInfoEmision.LockedWidth = true;


                  PdfPCell cellTextNCuenta = new PdfPCell(new Phrase("Número de Cuenta", fText));
                  cellTextNCuenta.PaddingTop = 8.5f;
                  cellTextNCuenta.PaddingLeft = 5f;


                  PdfPCell cellValueNCuenta = new PdfPCell(new Phrase(ReporteConciliacion.NumeroDeCuenta, fValue));
                  cellValueNCuenta.PaddingTop = 8.5f;
                  cellValueNCuenta.PaddingLeft = 5f;


                  PdfPCell cellTextFEmision = new PdfPCell(new Phrase("Fecha de Emisión", fText));
                  cellTextFEmision.VerticalAlignment = PdfPCell.ALIGN_CENTER;
                  cellTextFEmision.PaddingTop = 5f;



                  PdfPCell cellValueFEmision = new PdfPCell(new Phrase(ReporteConciliacion.FechaEmision, fValue));
                  cellValueFEmision.PaddingTop = 8.5f;
                  cellValueFEmision.HorizontalAlignment = PdfPCell.ALIGN_CENTER;


                  TableContenedorInfoEmision.AddCell(cellTextNCuenta);
                  TableContenedorInfoEmision.AddCell(cellValueNCuenta);
                  TableContenedorInfoEmision.AddCell(cellTextFEmision);
                  TableContenedorInfoEmision.AddCell(cellValueFEmision);

                  PdfPCell cellTextPeriodo = new PdfPCell(new Phrase("Periodo", fText));
                  cellTextPeriodo.PaddingTop = 8.5f;
                  cellTextPeriodo.PaddingLeft = 5f;

                  PdfPCell cellValuePeriodo = new PdfPCell(new Phrase("Desde el " + ReporteConciliacion.FechaInicioPeriodo + "   -   Hasta el " + ReporteConciliacion.FechaFinPeriodo, fValue));
                  cellValuePeriodo.PaddingTop = 8.5f;
                  cellValuePeriodo.PaddingLeft = 5f;
                  cellValuePeriodo.Colspan = 3;


                  TableContenedorInfoEmision.AddCell(cellTextPeriodo);
                  TableContenedorInfoEmision.AddCell(cellValuePeriodo);


                  PdfPCell cellContenedorInfoEmision = new PdfPCell(TableContenedorInfoEmision);
                  cellContenedorInfoEmision.Colspan = 3;
                  cellContenedorInfoEmision.Padding = 0f;
                  cellContenedorInfoEmision.VerticalAlignment = PdfPCell.ALIGN_CENTER;

                  table.AddCell(cellContenedorInfoEmision);

                  #endregion

                  #region SeccionResumen

                  PdfPCell cellResumenConciliacion = new PdfPCell(new Phrase("Resumen de Conciliación", fCabecerasSeccion));
                  cellResumenConciliacion.HorizontalAlignment = 0; //0=Left, 1=Centre, 2=Right
                  cellResumenConciliacion.Colspan = 3;
                  cellResumenConciliacion.BackgroundColor = BaseColor.LIGHT_GRAY;
                  cellResumenConciliacion.PaddingLeft = 3f;
                  cellResumenConciliacion.PaddingTop = 4f;
                  table.AddCell(cellResumenConciliacion);

                  PdfPTable TableContenedorResumenConciliacion = new PdfPTable(2);
                  TableContenedorResumenConciliacion.TotalWidth = 550f;
                  TableContenedorResumenConciliacion.AbsoluteWidths[0] = 375f;
                  TableContenedorResumenConciliacion.AbsoluteWidths[1] = 175f;
                  TableContenedorResumenConciliacion.LockedWidth = true;

                  #region Saldo Libro Mayor
                  PdfPCell cellTextSaldoLMayor = new PdfPCell(new Phrase("Saldo Libro Mayor", fText));
                  cellTextSaldoLMayor.PaddingTop = 8.5f;
                  cellTextSaldoLMayor.PaddingLeft = 5f;

                  PdfPCell cellValueSaldoLMayor = new PdfPCell();
                  Paragraph ValueSaldoLMayor = new Paragraph(String.Format("{0:0,0}", Int64.Parse(ReporteConciliacion.TotalSaldoLibroMayor)), fValue);
                  ValueSaldoLMayor.Alignment = Element.ALIGN_RIGHT;
                  cellValueSaldoLMayor.AddElement(ValueSaldoLMayor);
                  cellValueSaldoLMayor.PaddingTop = 8.5f;
                  cellValueSaldoLMayor.PaddingLeft = 5f;
                  cellValueSaldoLMayor.PaddingRight = 5f;

                  #endregion

                  #region Cheques no cobrados
                  PdfPCell cellTextChequeNoCobrado = new PdfPCell(new Phrase("Cheques no cobrados", fText));
                  cellTextChequeNoCobrado.PaddingTop = 8.5f;
                  cellTextChequeNoCobrado.PaddingLeft = 5f;

                  PdfPCell cellValueChequeNoCobrado = new PdfPCell();
                  Paragraph ValueChequeNoCobrado = new Paragraph(String.Format("{0:0,0}", Int64.Parse(ReporteConciliacion.TotalChequesNoCobrados)), fValue);
                  ValueChequeNoCobrado.Alignment = Element.ALIGN_RIGHT;
                  cellValueChequeNoCobrado.AddElement(ValueChequeNoCobrado);
                  cellValueChequeNoCobrado.PaddingTop = 8.5f;
                  cellValueChequeNoCobrado.PaddingLeft = 5f;
                  cellValueChequeNoCobrado.PaddingRight = 5f;

                  #endregion

                  #region Cheques no Contabilizados
                  PdfPCell cellTextChequeNoContabilizados = new PdfPCell(new Phrase("Cheques no Contabilizados", fText));
                  cellTextChequeNoContabilizados.PaddingTop = 8.5f;
                  cellTextChequeNoContabilizados.PaddingLeft = 5f;

                  PdfPCell cellValueChequeNoContabilizados = new PdfPCell();
                  Paragraph ValueChequeNoContabilizados = new Paragraph(String.Format("{0:0,0}", Int64.Parse(ReporteConciliacion.TotalChequesNoContabilizados)), fValue);
                  ValueChequeNoContabilizados.Alignment = Element.ALIGN_RIGHT;
                  cellValueChequeNoContabilizados.AddElement(ValueChequeNoContabilizados);
                  cellValueChequeNoContabilizados.PaddingTop = 8.5f;
                  cellValueChequeNoContabilizados.PaddingLeft = 5f;
                  cellValueChequeNoContabilizados.PaddingRight = 5f;

                  #endregion

                  #region Cheques con Observación
                  PdfPCell cellTextChequeConObservacion = new PdfPCell(new Phrase("Cheques con Observación", fText));
                  cellTextChequeConObservacion.PaddingTop = 8.5f;
                  cellTextChequeConObservacion.PaddingLeft = 5f;

                  PdfPCell cellValueChequeConObservacion = new PdfPCell();
                  Paragraph ValueChequeConObservacion = new Paragraph(String.Format("{0:0,0}", Int64.Parse(ReporteConciliacion.TotalChequesConObservacion)), fValue);
                  ValueChequeConObservacion.Alignment = Element.ALIGN_RIGHT;
                  cellValueChequeConObservacion.AddElement(ValueChequeConObservacion);
                  cellValueChequeConObservacion.PaddingTop = 8.5f;
                  cellValueChequeConObservacion.PaddingLeft = 5f;
                  cellValueChequeConObservacion.PaddingRight = 5f;

                  #endregion

                  #region Ingresos no Contabilizados
                  PdfPCell cellTextIngresosNoContabilizados = new PdfPCell(new Phrase("Ingresos No Contabilizados", fText));
                  cellTextIngresosNoContabilizados.PaddingTop = 8.5f;
                  cellTextIngresosNoContabilizados.PaddingLeft = 5f;

                  PdfPCell cellValueIngresosNoContabilizados = new PdfPCell();

                  Paragraph ValueIngresosNoContabilizados = new Paragraph(String.Format("{0:0,0}", Int64.Parse(ReporteConciliacion.TotalIngresosNoContabilizados)), fValue);
                  ValueIngresosNoContabilizados.Alignment = Element.ALIGN_RIGHT;
                  cellValueIngresosNoContabilizados.AddElement(ValueIngresosNoContabilizados);
                  cellValueIngresosNoContabilizados.PaddingTop = 8.5f;
                  cellValueIngresosNoContabilizados.PaddingLeft = 5f;
                  cellValueIngresosNoContabilizados.PaddingRight = 5f;

                  #endregion

                  #region Ingresos no Abonados
                  PdfPCell cellTextIngresosNoAbonados = new PdfPCell(new Phrase("Ingresos No Abonados", fText));
                  cellTextIngresosNoAbonados.PaddingTop = 8.5f;
                  cellTextIngresosNoAbonados.PaddingLeft = 5f;

                  PdfPCell cellValueIngresosNoAbonados = new PdfPCell();

                  Paragraph ValueIngresosNoAbonados = new Paragraph(String.Format("{0:0,0}", Int64.Parse(ReporteConciliacion.TotalIngresosNoAbonados)), fValue);
                  ValueIngresosNoAbonados.Alignment = Element.ALIGN_RIGHT;
                  cellValueIngresosNoAbonados.AddElement(ValueIngresosNoAbonados);
                  cellValueIngresosNoAbonados.PaddingTop = 8.5f;
                  cellValueIngresosNoAbonados.PaddingLeft = 5f;
                  cellValueIngresosNoAbonados.PaddingRight = 5f;

                  #endregion

                  #region Celda Divisoria
                  PdfPCell cellDivisoria = new PdfPCell(new Phrase(" ", fText));
                  cellDivisoria.Colspan = 2;
                  cellDivisoria.PaddingTop = 8.5f;
                  cellDivisoria.PaddingLeft = 5f;
                  #endregion

                  #region Saldo Cuenta Corriente
                  PdfPCell cellTextSaldoCuentaCorriente = new PdfPCell(new Phrase("Saldo Cuenta Corriente", fText));
                  cellTextSaldoCuentaCorriente.PaddingTop = 8.5f;
                  cellTextSaldoCuentaCorriente.PaddingLeft = 5f;

                  PdfPCell cellValueSaldoCuentaCorriente = new PdfPCell();
                  Paragraph ValueSaldoCuentaCorriente = new Paragraph(String.Format("{0:0,0}", Int64.Parse(ReporteConciliacion.TotalSaldoCuentaCorriente)), fValue);
                  ValueSaldoCuentaCorriente.Alignment = Element.ALIGN_RIGHT;
                  cellValueSaldoCuentaCorriente.AddElement(ValueSaldoCuentaCorriente);
                  cellValueSaldoCuentaCorriente.PaddingTop = 8.5f;
                  cellValueSaldoCuentaCorriente.PaddingLeft = 5f;
                  cellValueSaldoCuentaCorriente.PaddingRight = 5f;

                  #endregion

                  #region Saldo Arrastre
                  PdfPCell cellTextSaldoArrastre = new PdfPCell(new Phrase("Saldo Arrastre", fText));
                  cellTextSaldoArrastre.PaddingTop = 8.5f;
                  cellTextSaldoArrastre.PaddingLeft = 5f;

                  PdfPCell cellValueSaldoArrastre = new PdfPCell();
                  Paragraph ValueSaldoArrastre = new Paragraph(String.Format("{0:0,0}", ReporteConciliacion.TotalSaldoArrastre), fValue);
                  ValueSaldoArrastre.Alignment = Element.ALIGN_RIGHT;
                  cellValueSaldoArrastre.AddElement(ValueSaldoArrastre);
                  cellValueSaldoArrastre.PaddingTop = 8.5f;
                  cellValueSaldoArrastre.PaddingLeft = 5f;
                  cellValueSaldoArrastre.PaddingRight = 5f;

                  #endregion

                  #region Saldo SubTotal1
                  PdfPCell cellTextSubTotal1 = new PdfPCell(new Phrase("SubTotal", fText));
                  cellTextSubTotal1.PaddingTop = 8.5f;
                  cellTextSubTotal1.PaddingLeft = 5f;
                  cellTextSubTotal1.HorizontalAlignment = Element.ALIGN_RIGHT;

                  PdfPCell cellValueSubTotal1 = new PdfPCell();
                  Paragraph ValueSubTotal1 = new Paragraph(String.Format("{0:0,0}", 
                                                                   Convert.ToInt64(ReporteConciliacion.TotalSaldoCuentaCorriente)
                                                                   + Convert.ToInt64(ReporteConciliacion.TotalChequesNoContabilizados)
                                                                   + Convert.ToInt64(ReporteConciliacion.TotalIngresosNoAbonados)
                                                           ), fValue);
                  ValueSubTotal1.Alignment = Element.ALIGN_RIGHT;
                  cellValueSubTotal1.AddElement(ValueSubTotal1);
                  cellValueSubTotal1.PaddingTop = 8.5f;
                  cellValueSubTotal1.PaddingLeft = 5f;
                  cellValueSubTotal1.PaddingRight = 5f;

                  #endregion

                  #region Saldo SubTotal2
                  PdfPCell cellTextSubTotal2 = new PdfPCell(new Phrase("SubTotal", fText));
                  cellTextSubTotal2.PaddingTop = 8.5f;
                  cellTextSubTotal2.PaddingLeft = 5f;
                  cellTextSubTotal2.HorizontalAlignment = Element.ALIGN_RIGHT;

                  PdfPCell cellValueSubTotal2 = new PdfPCell();
                  Paragraph ValueSubTotal2 = new Paragraph(String.Format("{0:0,0}", 
                                                                    Convert.ToInt64(ReporteConciliacion.TotalIngresosNoContabilizados)
                                                                    + Convert.ToInt64(ReporteConciliacion.TotalChequesNoCobrados)
                                                                    + ReporteConciliacion.TotalSaldoArrastre
                                                           ), fValue);
                  ValueSubTotal2.Alignment = Element.ALIGN_RIGHT;
                  cellValueSubTotal2.AddElement(ValueSubTotal2);
                  cellValueSubTotal2.PaddingTop = 8.5f;
                  cellValueSubTotal2.PaddingLeft = 5f;
                  cellValueSubTotal2.PaddingRight = 5f;

                  #endregion

                  //1.- Saldo Cuenta Corriente
                  TableContenedorResumenConciliacion.AddCell(cellTextSaldoCuentaCorriente);
                  TableContenedorResumenConciliacion.AddCell(cellValueSaldoCuentaCorriente);
                  //2.- Cheques No Contabilizados
                  TableContenedorResumenConciliacion.AddCell(cellTextChequeNoContabilizados);
                  TableContenedorResumenConciliacion.AddCell(cellValueChequeNoContabilizados);
                  //3.- Ingresos No Abonados
                  TableContenedorResumenConciliacion.AddCell(cellTextIngresosNoAbonados);
                  TableContenedorResumenConciliacion.AddCell(cellValueIngresosNoAbonados);
                  
                  //SubTotal
                  TableContenedorResumenConciliacion.AddCell(cellTextSubTotal1);
                  TableContenedorResumenConciliacion.AddCell(cellValueSubTotal1);
                  //Separador
                  TableContenedorResumenConciliacion.AddCell(cellDivisoria);


                  //4.- Ingresos No Contabilizados
                  TableContenedorResumenConciliacion.AddCell(cellTextIngresosNoContabilizados);
                  TableContenedorResumenConciliacion.AddCell(cellValueIngresosNoContabilizados);
                  //5.- Cheques No Cobrados
                  TableContenedorResumenConciliacion.AddCell(cellTextChequeNoCobrado);
                  TableContenedorResumenConciliacion.AddCell(cellValueChequeNoCobrado);
                  //6.- Saldo de Arrastre
                  TableContenedorResumenConciliacion.AddCell(cellTextSaldoArrastre);
                  TableContenedorResumenConciliacion.AddCell(cellValueSaldoArrastre);

                  //SubTotal
                  TableContenedorResumenConciliacion.AddCell(cellTextSubTotal2);
                  TableContenedorResumenConciliacion.AddCell(cellValueSubTotal2);
                  //Separador
                  TableContenedorResumenConciliacion.AddCell(cellDivisoria);

                  //Otros
                  if (Int64.Parse(ReporteConciliacion.TotalChequesConObservacion) != 0)
                  {
                      TableContenedorResumenConciliacion.AddCell(cellTextChequeConObservacion);
                      TableContenedorResumenConciliacion.AddCell(cellValueChequeConObservacion);
                  }
                  //7.- Saldo Libro Mayor
                  TableContenedorResumenConciliacion.AddCell(cellTextSaldoLMayor);
                  TableContenedorResumenConciliacion.AddCell(cellValueSaldoLMayor);


                  PdfPCell cellContenedorResumenConciliacion = new PdfPCell(TableContenedorResumenConciliacion);
                  cellContenedorResumenConciliacion.Colspan = 3;
                  cellContenedorResumenConciliacion.Padding = 0f;
                  cellContenedorResumenConciliacion.VerticalAlignment = PdfPCell.ALIGN_CENTER;

                  table.AddCell(cellContenedorResumenConciliacion);

                  #endregion

                  #region SeccionObservaciones

                  PdfPCell cellObservaciones = new PdfPCell(new Phrase("Observaciones ", fCabecerasSeccion));
                  cellObservaciones.HorizontalAlignment = 0; //0=Left, 1=Centre, 2=Right
                  cellObservaciones.Colspan = 3;
                  cellObservaciones.BackgroundColor = BaseColor.LIGHT_GRAY;
                  cellObservaciones.PaddingLeft = 3f;
                  cellObservaciones.PaddingTop = 4f;
                  table.AddCell(cellObservaciones);

                  PdfPTable TableContenedorObservaciones = new PdfPTable(1);
                  TableContenedorObservaciones.TotalWidth = 550f;
                  TableContenedorObservaciones.LockedWidth = true;



                  #region Text Observaciones
                  PdfPCell cellValueObservaciones = new PdfPCell();
                  Paragraph ValueObservaciones = new Paragraph(ReporteConciliacion.Observaciones, fValue);
                  ValueObservaciones.Alignment = Element.ALIGN_JUSTIFIED;
                  cellValueObservaciones.AddElement(ValueObservaciones);
                  cellValueObservaciones.PaddingTop = 8.5f;
                  cellValueObservaciones.PaddingLeft = 5f;
                  cellValueObservaciones.PaddingRight = 5f;

                  #endregion

                  TableContenedorObservaciones.AddCell(cellValueObservaciones);
                  TableContenedorObservaciones.Rows[0].MaxHeights = 120f;

                  PdfPCell cellContenedorObservaciones = new PdfPCell(TableContenedorObservaciones);
                  cellContenedorObservaciones.Colspan = 3;
                  cellContenedorObservaciones.Padding = 0f;
                  cellContenedorObservaciones.VerticalAlignment = PdfPCell.ALIGN_CENTER;

                  table.AddCell(cellContenedorObservaciones);

                  #endregion

                  #region SeccionFirmas


                  PdfPTable TableContenedorFirmas = new PdfPTable(3);
                  TableContenedorFirmas.TotalWidth = 550f;
                  TableContenedorFirmas.AbsoluteWidths[0] = 182f;
                  TableContenedorFirmas.AbsoluteWidths[1] = 186f;
                  TableContenedorFirmas.AbsoluteWidths[2] = 182f;
                  TableContenedorFirmas.LockedWidth = true;

                  #region Firmas Superiores

                  #region FirmaIzquierda
                  StringBuilder sb = new StringBuilder();
                  sb.AppendLine("______________________________");
                  sb.AppendLine(ReporteConciliacion.GlosaFirmaIzquierda);
                  PdfPCell cellFirmaIzquierda = new PdfPCell();
                  Paragraph ValueFirmaIzquierda = new Paragraph(sb.ToString(), fValue);
                  ValueFirmaIzquierda.Alignment = Element.ALIGN_CENTER;
                  cellFirmaIzquierda.AddElement(ValueFirmaIzquierda);
                  cellFirmaIzquierda.Border = 0;
                  cellFirmaIzquierda.PaddingTop = 60f;
                  cellFirmaIzquierda.PaddingLeft = 5f;
                  cellFirmaIzquierda.PaddingRight = 5f;
                  #endregion

                  #region Divicion Centro
                  PdfPCell cellDivisionCentro = new PdfPCell();
                  cellDivisionCentro.PaddingTop = 8.5f;
                  cellDivisionCentro.PaddingLeft = 5f;
                  cellDivisionCentro.PaddingRight = 5f;
                  cellDivisionCentro.Border = 0;

                  #endregion

                  #region FirmaDerecha
                  PdfPCell cellFirmaDerecha = new PdfPCell();
                  sb = new StringBuilder();
                  sb.AppendLine("______________________________");
                  sb.AppendLine(ReporteConciliacion.GlosaFirmaDerecha);
                  Paragraph ValueFirmaDerecha = new Paragraph(sb.ToString(), fValue);
                  ValueFirmaDerecha.Alignment = Element.ALIGN_CENTER;
                  cellFirmaDerecha.AddElement(ValueFirmaDerecha);
                  cellFirmaDerecha.PaddingTop = 60f;
                  cellFirmaDerecha.PaddingLeft = 5f;
                  cellFirmaDerecha.PaddingRight = 5f;
                  cellFirmaDerecha.Border = 0;
                  #endregion

                  TableContenedorFirmas.AddCell(cellFirmaIzquierda);
                  TableContenedorFirmas.AddCell(cellDivisionCentro);
                  TableContenedorFirmas.AddCell(cellFirmaDerecha);

                  #endregion

                  #region Frimas Inferiores

                  #region Divicion Izquierda
                  PdfPCell cellDivisionIzquierda = new PdfPCell();
                  cellDivisionIzquierda.PaddingTop = 8.5f;
                  cellDivisionIzquierda.PaddingLeft = 5f;
                  cellDivisionIzquierda.PaddingRight = 5f;
                  cellDivisionIzquierda.Border = 0;

                  #endregion

                  #region FirmaCentro
                  PdfPCell cellFirmaCentro = new PdfPCell();
                  sb = new StringBuilder();
                  sb.AppendLine("______________________________");
                  sb.AppendLine(ReporteConciliacion.GlosaFirmaCentro);
                  Paragraph ValueFirmaCentro = new Paragraph(sb.ToString(), fValue);
                  ValueFirmaCentro.Alignment = Element.ALIGN_CENTER;
                  cellFirmaCentro.AddElement(ValueFirmaCentro);
                  cellFirmaCentro.PaddingTop = 60f;
                  cellFirmaCentro.PaddingLeft = 5f;
                  cellFirmaCentro.PaddingRight = 5f;
                  cellFirmaCentro.Border = 0;
                  #endregion

                  #region Divicion Derecha
                  PdfPCell cellDivisionDerecha = new PdfPCell();
                  cellDivisionDerecha.PaddingTop = 8.5f;
                  cellDivisionDerecha.PaddingLeft = 5f;
                  cellDivisionDerecha.PaddingRight = 5f;
                  cellDivisionDerecha.Border = 0;

                  #endregion

                  TableContenedorFirmas.AddCell(cellDivisionIzquierda);
                  TableContenedorFirmas.AddCell(cellFirmaCentro);
                  TableContenedorFirmas.AddCell(cellDivisionDerecha);

                  #endregion

                  TableContenedorFirmas.Rows[0].MaxHeights = 115f;
                  TableContenedorFirmas.Rows[1].MaxHeights = 115f;

                  PdfPCell cellContenedorFirmas = new PdfPCell(TableContenedorFirmas);
                  cellContenedorFirmas.Colspan = 3;
                  cellContenedorFirmas.Padding = 0f;
                  cellContenedorFirmas.VerticalAlignment = PdfPCell.ALIGN_CENTER;

                  table.AddCell(cellContenedorFirmas);

                  #endregion

                  #region SeccionDetalles



                  PdfPTable TableContenedorDetalles = null;

                  foreach (KeyValuePair<string, IList<ItemConceptoFuncionalDTO>> detalleConciliacion in ReporteConciliacion.DetalleMovimientosConciliacion)
                  {
                      TableContenedorDetalles = new PdfPTable(5);
                      TableContenedorDetalles.TotalWidth = 550f;
                      TableContenedorDetalles.AbsoluteWidths[0] = 30f;
                      TableContenedorDetalles.AbsoluteWidths[1] = 65f;
                      TableContenedorDetalles.AbsoluteWidths[2] = 250f;
                      TableContenedorDetalles.AbsoluteWidths[3] = 105f;
                      TableContenedorDetalles.AbsoluteWidths[4] = 100f;
                      TableContenedorDetalles.LockedWidth = true;
                      TableContenedorDetalles.ExtendLastRow = true;

                      String GlosaDetalle = detalleConciliacion.Key;
                      IList<ItemConceptoFuncionalDTO> listDetalles = detalleConciliacion.Value;

                      if (listDetalles.Count != 0)
                      {

                          #region Glosa
                          PdfPCell cellDetalles = new PdfPCell(new Phrase(GlosaDetalle, fCabecerasSeccion));
                          cellDetalles.HorizontalAlignment = 0; //0=Left, 1=Centre, 2=Right
                          cellDetalles.Colspan = 5;
                          cellDetalles.BackgroundColor = BaseColor.LIGHT_GRAY;
                          cellDetalles.PaddingLeft = 3f;
                          cellDetalles.PaddingTop = 4f;
                          TableContenedorDetalles.AddCell(cellDetalles);
                          #endregion

                          #region Cabeceras Detalle

                          //CabeceraID
                          PdfPCell cellValueCabeceraID = new PdfPCell();
                          Paragraph ValueCabeceraID = new Paragraph("ID", fValue);
                          ValueCabeceraID.Alignment = Element.ALIGN_CENTER;
                          cellValueCabeceraID.AddElement(ValueCabeceraID);
                          cellValueCabeceraID.PaddingTop = 8.5f;
                          cellValueCabeceraID.PaddingLeft = 5f;
                          cellValueCabeceraID.PaddingRight = 5f;

                          //CabeceraFecha
                          PdfPCell cellValueCabeceraFecha = new PdfPCell();
                          Paragraph ValueCabeceraFecha = new Paragraph("Fecha", fValue);
                          ValueCabeceraFecha.Alignment = Element.ALIGN_CENTER;
                          cellValueCabeceraFecha.AddElement(ValueCabeceraFecha);
                          cellValueCabeceraFecha.PaddingTop = 8.5f;
                          cellValueCabeceraFecha.PaddingLeft = 5f;
                          cellValueCabeceraFecha.PaddingRight = 5f;

                          //CabeceraDescripcion
                          PdfPCell cellValueCabeceraDescripcion = new PdfPCell();
                          Paragraph ValueCabeceraDescripcion = new Paragraph("Descripción", fValue);
                          ValueCabeceraDescripcion.Alignment = Element.ALIGN_CENTER;
                          cellValueCabeceraDescripcion.AddElement(ValueCabeceraDescripcion);
                          cellValueCabeceraDescripcion.PaddingTop = 8.5f;
                          cellValueCabeceraDescripcion.PaddingLeft = 5f;
                          cellValueCabeceraDescripcion.PaddingRight = 5f;

                          //CabeceraNDocumento
                          PdfPCell cellValueCabeceraNDocumento = new PdfPCell();
                          Paragraph ValueCabeceraNDocumento = new Paragraph("Número de Documento", fValue);
                          ValueCabeceraNDocumento.Alignment = Element.ALIGN_CENTER;
                          cellValueCabeceraNDocumento.AddElement(ValueCabeceraNDocumento);
                          cellValueCabeceraNDocumento.PaddingTop = 8.5f;
                          cellValueCabeceraNDocumento.PaddingLeft = 5f;
                          cellValueCabeceraNDocumento.PaddingRight = 5f;

                          //CabeceraMonto
                          PdfPCell cellValuCabeceraeMonto = new PdfPCell();
                          Paragraph ValueCabeceraMonto = new Paragraph("Monto", fValue);
                          ValueCabeceraMonto.Alignment = Element.ALIGN_CENTER;
                          cellValuCabeceraeMonto.AddElement(ValueCabeceraMonto);
                          cellValuCabeceraeMonto.PaddingTop = 8.5f;
                          cellValuCabeceraeMonto.PaddingLeft = 5f;
                          cellValuCabeceraeMonto.PaddingRight = 5f;

                          TableContenedorDetalles.AddCell(cellValueCabeceraID);
                          TableContenedorDetalles.AddCell(cellValueCabeceraFecha);
                          TableContenedorDetalles.AddCell(cellValueCabeceraDescripcion);
                          TableContenedorDetalles.AddCell(cellValueCabeceraNDocumento);
                          TableContenedorDetalles.AddCell(cellValuCabeceraeMonto);

                          #endregion

                          int i = 0;
                          foreach (ItemConceptoFuncionalDTO item in listDetalles)
                          {

                              #region Lista Valores Detalle

                              //ID
                              i++;
                              PdfPCell cellValueID = new PdfPCell();
                              Paragraph ValueID = new Paragraph(i.ToString(), fValue);
                              ValueID.Alignment = Element.ALIGN_CENTER;
                              cellValueID.AddElement(ValueID);
                              cellValueID.PaddingTop = 8.5f;
                              cellValueID.PaddingLeft = 5f;
                              cellValueID.PaddingRight = 5f;
                              cellValueID.Border = 0;
                              cellValueID.BorderWidthLeft = 0.1f;
                              cellValueID.BorderWidthRight = 0.1f;



                              //Fecha
                              PdfPCell cellValueFecha = new PdfPCell();
                              Paragraph ValueFecha = new Paragraph(item.FchDocumentoText, fValue);
                              ValueFecha.Alignment = Element.ALIGN_CENTER;
                              cellValueFecha.AddElement(ValueFecha);
                              cellValueFecha.PaddingTop = 8.5f;
                              cellValueFecha.PaddingLeft = 5f;
                              cellValueFecha.PaddingRight = 5f;
                              cellValueFecha.Border = 0;
                              cellValueFecha.BorderWidthRight = 0.1f;


                              //Descripcion
                              PdfPCell cellValueDescripcion = new PdfPCell();
                              Paragraph ValueDescripcion = new Paragraph(item.Glosa.ToUpper(), fValue);
                              ValueDescripcion.Alignment = Element.ALIGN_LEFT;
                              cellValueDescripcion.AddElement(ValueDescripcion);
                              cellValueDescripcion.PaddingTop = 8.5f;
                              cellValueDescripcion.PaddingLeft = 5f;
                              cellValueDescripcion.PaddingRight = 5f;
                              cellValueDescripcion.Border = 0;
                              cellValueDescripcion.BorderWidthRight = 0.1f;


                              //NDocumento
                              PdfPCell cellValueNDocumento = new PdfPCell();
                              Paragraph ValueNDocumento = new Paragraph(item.NmrDocumento, fValue);
                              ValueNDocumento.Alignment = Element.ALIGN_RIGHT;
                              cellValueNDocumento.AddElement(ValueNDocumento);
                              cellValueNDocumento.PaddingTop = 8.5f;
                              cellValueNDocumento.PaddingLeft = 5f;
                              cellValueNDocumento.PaddingRight = 5f;
                              cellValueNDocumento.Border = 0;
                              cellValueNDocumento.BorderWidthRight = 0.1f;


                              //Monto
                              String MontoFormateado = String.Format("{0:0,0}", item.Monto);
                              PdfPCell cellValueMonto = new PdfPCell();
                              Paragraph ValueMonto = new Paragraph(MontoFormateado, fValue);
                              ValueMonto.Alignment = Element.ALIGN_RIGHT;
                              cellValueMonto.AddElement(ValueMonto);
                              cellValueMonto.PaddingTop = 8.5f;
                              cellValueMonto.PaddingLeft = 5f;
                              cellValueMonto.PaddingRight = 5f;
                              cellValueMonto.Border = 0;
                              cellValueMonto.BorderWidthRight = 0.1f;



                              TableContenedorDetalles.AddCell(cellValueID);
                              TableContenedorDetalles.AddCell(cellValueFecha);
                              TableContenedorDetalles.AddCell(cellValueDescripcion);
                              TableContenedorDetalles.AddCell(cellValueNDocumento);
                              TableContenedorDetalles.AddCell(cellValueMonto);

                              #endregion
                          }

                          PdfPCell cellContenedorDetalles = new PdfPCell(TableContenedorDetalles);
                          cellContenedorDetalles.Colspan = 3;
                          cellContenedorDetalles.Padding = 0f;
                          cellContenedorDetalles.VerticalAlignment = PdfPCell.ALIGN_CENTER;
                          table.AddCell(cellContenedorDetalles);

                          PdfPCell cellContenedorBlanc = new PdfPCell();
                          cellContenedorBlanc.Colspan = 3;
                          cellContenedorBlanc.Padding = 0f;
                          cellContenedorBlanc.VerticalAlignment = PdfPCell.ALIGN_CENTER;
                          cellContenedorBlanc.Border = 0;
                          cellContenedorBlanc.PaddingLeft = 3f;
                          cellContenedorBlanc.PaddingTop = 30f;
                          table.AddCell(cellContenedorBlanc);
                      }
                  }




                  #endregion


                  doc.Add(table);

                  #endregion

                  doc.Close();

                  Response.ClearContent();
                  Response.ClearHeaders();
                  Response.ContentType = "application/pdf";
                  Response.AddHeader("Content-Disposition", "attachment;filename=Conciliacion.pdf");
                  Response.BinaryWrite(ms.ToArray());
                  Response.End();

              }
          }
      }


    }
}
